Para este módulo é necessário instalar (install.packages()) e carregar (library()) as seguintes bibliotecas
library(tidyverse) # contem o package ggplot2, entre outros
library(fields) # permite aceder a diferentes palettes de cores
library(maps) # permite aceder aos mapas dos diferentes países
library(rgdal) # permite importar ficheiros com formato shapefile
Pretendemos fazer uma visualização espacial dos dados dados_eurostat_M4. Estes dados fornecem informação da taxa de desemprego para um conjunto de países e foram obtidos através do package Eurostat do R.
# carregar os dados
load("dados_eurostat_M4.RData")
# alterar o nome para tornar mais simples
eurostat <- dados_eurostat_M4
# View(dados_eurostat)
# primeiras 6 linhas da tabela de dados
head(eurostat)## country time year cod Females Males Over25_F Over25_M Over25 Total
## 1 Finland 1988.000 1988 Finla 4.1 5.4 2.9 4.2 3.6 4.8
## 2 Finland 1988.083 1988 Finla 4.0 5.1 2.8 3.9 3.4 4.6
## 3 Finland 1988.167 1988 Finla 3.9 4.9 2.8 3.7 3.2 4.5
## 4 Finland 1988.250 1988 Finla 3.9 4.8 2.7 3.6 3.2 4.4
## 5 Finland 1988.333 1988 Finla 3.9 4.8 2.7 3.6 3.2 4.3
## 6 Finland 1988.417 1988 Finla 3.8 4.7 2.7 3.6 3.1 4.3
## Under25_F Under25_M Under25
## 1 10.7 12.2 11.5
## 2 10.6 12.1 11.4
## 3 10.6 11.9 11.3
## 4 10.5 11.7 11.1
## 5 10.4 11.5 11.0
## 6 10.3 11.2 10.7
## country time year cod Females Males Over25_F Over25_M Over25
## 10845 Turkey 2018.500 2018 Turke NA NA NA NA 9.4
## 10846 Turkey 2018.583 2018 Turke NA NA NA NA 9.5
## 10847 Turkey 2018.667 2018 Turke NA NA NA NA 9.6
## 10848 Turkey 2018.750 2018 Turke NA NA NA NA 9.7
## 10849 Turkey 2018.833 2018 Turke NA NA NA NA 10.1
## 10850 Turkey 2018.917 2018 Turke NA NA NA NA 10.7
## Total Under25_F Under25_M Under25
## 10845 11.1 NA NA 20.1
## 10846 11.3 NA NA 20.7
## 10847 11.5 NA NA 21.4
## 10848 11.6 NA NA 21.9
## 10849 12.1 NA NA 22.6
## 10850 12.7 NA NA 23.1
## [1] 10850 13
## Classes 'tbl_df', 'tbl' and 'data.frame': 10850 obs. of 13 variables:
## $ country : chr "Finland" "Finland" "Finland" "Finland" ...
## $ time : num 1988 1988 1988 1988 1988 ...
## $ year : num 1988 1988 1988 1988 1988 ...
## $ cod : Factor w/ 33 levels "Austr","Belgi",..: 9 9 9 9 9 9 9 9 9 9 ...
## $ Females : num 4.1 4 3.9 3.9 3.9 3.8 3.8 3.7 3.6 3.6 ...
## $ Males : num 5.4 5.1 4.9 4.8 4.8 4.7 4.5 4.3 4.2 4.1 ...
## $ Over25_F : num 2.9 2.8 2.8 2.7 2.7 2.7 2.6 2.5 2.5 2.4 ...
## $ Over25_M : num 4.2 3.9 3.7 3.6 3.6 3.6 3.4 3.2 3.1 3 ...
## $ Over25 : num 3.6 3.4 3.2 3.2 3.2 3.1 3 2.9 2.8 2.7 ...
## $ Total : num 4.8 4.6 4.5 4.4 4.3 4.3 4.1 4 3.9 3.8 ...
## $ Under25_F: num 10.7 10.6 10.6 10.5 10.4 10.3 10.2 10.1 10.1 9.9 ...
## $ Under25_M: num 12.2 12.1 11.9 11.7 11.5 11.2 10.8 10.6 10.5 10.4 ...
## $ Under25 : num 11.5 11.4 11.3 11.1 11 10.7 10.5 10.4 10.3 10.2 ...
## country time year cod
## Length:10850 Min. :1983 Min. :1983 Irela : 435
## Class :character 1st Qu.:1998 1st Qu.:1997 Nethe : 435
## Mode :character Median :2005 Median :2005 Swede : 435
## Mean :2004 Mean :2004 Denma : 434
## 3rd Qu.:2012 3rd Qu.:2012 Franc : 434
## Max. :2019 Max. :2019 Italy : 434
## (Other):8243
## Females Males Over25_F Over25_M
## Min. : 1.300 Min. : 1.100 Min. : 0.900 Min. : 0.800
## 1st Qu.: 5.300 1st Qu.: 5.000 1st Qu.: 4.600 1st Qu.: 4.100
## Median : 7.600 Median : 6.900 Median : 6.600 Median : 5.700
## Mean : 8.798 Mean : 7.854 Mean : 7.639 Mean : 6.673
## 3rd Qu.:10.900 3rd Qu.: 9.400 3rd Qu.: 9.700 3rd Qu.: 8.300
## Max. :31.900 Max. :26.000 Max. :29.800 Max. :23.600
## NA's :168 NA's :168 NA's :604 NA's :604
## Over25 Total Under25_F Under25_M
## Min. : 1.00 Min. : 1.300 Min. : 2.70 Min. : 2.60
## 1st Qu.: 4.40 1st Qu.: 5.200 1st Qu.:10.50 1st Qu.:11.50
## Median : 6.10 Median : 7.400 Median :17.10 Median :16.80
## Mean : 7.06 Mean : 8.242 Mean :18.74 Mean :18.24
## 3rd Qu.: 8.60 3rd Qu.:10.000 3rd Qu.:23.80 3rd Qu.:22.50
## Max. :25.80 Max. :27.800 Max. :68.80 Max. :57.80
## NA's :436 NA's :619 NA's :619
## Under25
## Min. : 2.70
## 1st Qu.:10.60
## Median :16.60
## Mean :17.97
## 3rd Qu.:22.60
## Max. :60.30
## NA's :13
Criação da data frame world_map, com informação espacial de todos os países.
Uma vez que o R pode ter mais do que uma função map_data(), podemos indicar que pretendemos especificamente usar a da biblioteca ggplot2 ao inserir o nome da biblioteca, seguido por ::, do género ggplot2::map_data("world").
# help(map_data)
world_map <- ggplot2::map_data("world")
# podemos ver o nome das varias colunas da tabela world_map
colnames(world_map)## [1] "long" "lat" "group" "order" "region" "subregion"
Usando as colunas long e lat para os eixos, podemos criar um mapa do mundo agrupado por group (país).
library(ggplot2)
# primeira vista do planisfério
ggplot(world_map, aes(x = long, y = lat, group = group)) +
geom_polygon()# adicionando opcoes para melhorar o grafico
ggplot(world_map, aes(x = long, y = lat, group = group)) +
geom_polygon(fill = "lightblue", colour = "gray39") + # mudar as cores de preenchimento e contornos
ggtitle("Planisfério") + # adicionar um titulo
xlab("Longitude") + ylab("Latitude") + # adicionar nomes aos eixos
coord_fixed(1.2) # evitar desformatacao da imagem
Com a função map_data podemos também identificar o conjunto de países que pretendemos representar no mapa.
# 1. criar um vector com os paises pretendidos
paises <- c("Portugal", "Spain", "France", "Switzerland", "Germany",
"Austria", "Belgium", "UK", "Netherlands",
"Denmark", "Poland", "Italy", "Croatia",
"Slovenia", "Hungary", "Slovakia", "Czech republic")
# 2. selecionar os paises na funcao map_data() definindo a REGIAO pretendida
mapas <- map_data("world", region = paises)
# 3. mapeamento dos paises
ggplot(mapas, aes(x = long, y = lat)) +
geom_polygon(aes( group = group), fill="lightgray", colour="gray39") +
xlab("Longitude") + ylab("Latitude") +
coord_fixed(1.2)
Nesta análise pretendemos representar os dados do desemprego (tabela eurostat) apenas para Janeiro de 2019. Para isso usamos a coluna time que nos fornece informação do mês. Note-se que esta coluna é diferente de year que unicamente indica o ano de cada registo.
## [1] "country" "time" "year" "cod" "Females"
## [6] "Males" "Over25_F" "Over25_M" "Over25" "Total"
## [11] "Under25_F" "Under25_M" "Under25"
# NOTA: time e year sao duas variáveis com valores diferentes!
# remover os dois paises dos dados que nao sao da Europa e filtrar Janeiro de 2019
dados_2019 <- filter(eurostat, time == "2019",
country != "Japan", country != "USA")
head(dados_2019)## # A tibble: 6 x 13
## country time year cod Females Males Over25_F Over25_M Over25 Total
## <chr> <dbl> <dbl> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Finland 2019 2019 Finla 6.4 6.9 5.1 5.5 5.3 6.6
## 2 Ireland 2019 2019 Irela 5.7 5.6 4.9 4.3 4.6 5.7
## 3 Nether… 2019 2019 Nethe 3.7 3.5 3.2 2.9 3 3.6
## 4 Sweden 2019 2019 Swede 6.1 6 4.7 4.5 4.6 6.1
## 5 Austria 2019 2019 Austr 4.6 5 4.2 4.6 4.4 4.8
## 6 Belgium 2019 2019 Belgi 5.3 6.2 4.8 5.6 5.2 5.8
## # … with 3 more variables: Under25_F <dbl>, Under25_M <dbl>, Under25 <dbl>
## [1] 30 13
Vamos agora juntar dados_2019 com world_map, para poder regresentar os dados da taxa de desemprego por país. Para isso é necessário garantir que a variável com indicação do país tem o mesmo nome em ambos os data.frames.
## [1] "country" "time" "year" "cod" "Females"
## [6] "Males" "Over25_F" "Over25_M" "Over25" "Total"
## [11] "Under25_F" "Under25_M" "Under25"
## [1] "long" "lat" "group" "order" "region" "subregion"
# alterar o nome da coluna dos paises de COUNTRY para REGION
dados_2019 <- rename(dados_2019, region = country)Devemos ainda garantir que os nomes dos países estão escritos da mesma forma.
# Os dois conjuntos de dados apresentam os mesmos nomes para todos os paises que pretendemos representar?
dados_2019$region %in% world_map$region## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
## [12] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [23] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
# parece haver um diferente. Qual e a sua posicao?
which(dados_2019$region %in% world_map$region == FALSE)## [1] 9
## [1] "Czechia"
# paises a representar
mapas <- map_data("world", region = dados_2019$region)
ggplot(mapas, aes(x = long, y = lat, group = group)) +
geom_polygon(fill="lightgray", colour="gray39") +
xlab("Longitude") + ylab("Latitude") +
ggtitle("Países a estudar") +
coord_fixed(1.1) +
theme_bw() # alterar o tema do mapaDepois de garantida a coerência entre os nomes das variáveis e países podemos por fim ligar as duas tabelas de dados através da função left_join()e desenhar o mapa representativo do desemprego global em Janeiro de 2019 para cada país.
# juntar as duas data frames por regiao
dados_2019_map <- left_join(dados_2019, mapas, by = "region")
head(dados_2019_map)## # A tibble: 6 x 18
## region time year cod Females Males Over25_F Over25_M Over25 Total
## <chr> <dbl> <dbl> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Finla… 2019 2019 Finla 6.4 6.9 5.1 5.5 5.3 6.6
## 2 Finla… 2019 2019 Finla 6.4 6.9 5.1 5.5 5.3 6.6
## 3 Finla… 2019 2019 Finla 6.4 6.9 5.1 5.5 5.3 6.6
## 4 Finla… 2019 2019 Finla 6.4 6.9 5.1 5.5 5.3 6.6
## 5 Finla… 2019 2019 Finla 6.4 6.9 5.1 5.5 5.3 6.6
## 6 Finla… 2019 2019 Finla 6.4 6.9 5.1 5.5 5.3 6.6
## # … with 8 more variables: Under25_F <dbl>, Under25_M <dbl>,
## # Under25 <dbl>, long <dbl>, lat <dbl>, group <dbl>, order <int>,
## # subregion <chr>
# taxa de desemprego global em 2019
ggplot(dados_2019_map, aes(long, lat)) +
geom_polygon(aes(group = group, fill = Total)) +
ggtitle("Taxa de desemprego global em Janeiro de 2019") +
xlab("Longitude") + ylab("Latitude") +
coord_fixed(1.1)
Para alterar a palette de cores podemos usar diversas bibliotecas. Aqui usaremos as palettes da library(fields), implementadas através da função scale_fill_gradientn() da biblioteca ggplot2.
library(fields) # utilizar outra palete de cores
# uso da funcao scale_fill_gradientn
ggplot(dados_2019_map, aes(x = long, y = lat)) +
geom_polygon(aes(group = group, fill = Total)) +
ggtitle("Taxa de desemprego global em Janeiro de 2019") +
xlab("Longitude") + ylab("Latitude") +
# scale_fill_gradient(low="lightblue", high="red") +
scale_fill_gradientn(colours = terrain.colors(3)) +
coord_fixed(1.1)
Continuando com os dados de Janeiro de 2019 (dados_2019), suponhamos que pretendemos representar a taxa de desemprego por categorias resultantes do cruzamento do sexo com o escalão etário.
## [1] "region" "time" "year" "cod" "Females"
## [6] "Males" "Over25_F" "Over25_M" "Over25" "Total"
## [11] "Under25_F" "Under25_M" "Under25"
# criacao de uma nova estrutura de dados com a criacao da coluna CATEGORY
dados_2019_cat <- gather(dados_2019,
"Females", "Males", "Over25_F", "Over25_M",
"Over25", "Total", "Under25_F", "Under25_M", "Under25",
key = "category",
value = "values")
head(dados_2019_cat)## # A tibble: 6 x 6
## region time year cod category values
## <chr> <dbl> <dbl> <fct> <chr> <dbl>
## 1 Finland 2019 2019 Finla Females 6.4
## 2 Ireland 2019 2019 Irela Females 5.7
## 3 Netherlands 2019 2019 Nethe Females 3.7
## 4 Sweden 2019 2019 Swede Females 6.1
## 5 Austria 2019 2019 Austr Females 4.6
## 6 Belgium 2019 2019 Belgi Females 5.3
# e necessario definir CATEGORY como valores categoricos -- tera de ser um factor
dados_2019_cat$category <- as.factor(dados_2019_cat$category)
# quais os niveis da coluna CATEGORY?
unique(dados_2019_cat$category)## [1] Females Males Over25_F Over25_M Over25 Total Under25_F
## [8] Under25_M Under25
## 9 Levels: Females Males Over25 Over25_F Over25_M Total ... Under25_M
## [1] "Females" "Males" "Over25" "Over25_F" "Over25_M" "Total"
## [7] "Under25" "Under25_F" "Under25_M"
## Females Males Over25 Over25_F Over25_M Total Under25
## 30 30 30 30 30 30 30
## Under25_F Under25_M
## 30 30
# juntar as duas data frames atraves de left_join()
dados_eurostat_map <- left_join(dados_2019_cat, mapas, by = "region")
head(dados_eurostat_map)## # A tibble: 6 x 11
## region time year cod category values long lat group order
## <chr> <dbl> <dbl> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <int>
## 1 Finla… 2019 2019 Finla Females 6.4 20.6 60.0 1 1
## 2 Finla… 2019 2019 Finla Females 6.4 20.6 60.0 1 2
## 3 Finla… 2019 2019 Finla Females 6.4 20.5 60.0 1 3
## 4 Finla… 2019 2019 Finla Females 6.4 20.5 60.0 1 4
## 5 Finla… 2019 2019 Finla Females 6.4 20.4 60.0 1 5
## 6 Finla… 2019 2019 Finla Females 6.4 20.4 60.0 1 6
## # … with 1 more variable: subregion <chr>
ggplot(dados_eurostat_map, aes(x = long, y = lat)) +
geom_polygon(aes(group = group, fill = values)) +
scale_fill_gradient(low="#99d594", high="#fc8d59") +
facet_wrap( ~ category, ncol = 5) +
ggtitle("Taxa de desemprego por Categorias (Jan 2019)") +
xlab("Longitude") + ylab("Latitude") +
coord_fixed()
Pretende-se agora analisar a taxa de desemprego por país ao longo do ano de 2018.
## # A tibble: 6 x 13
## country time year cod Females Males Over25_F Over25_M Over25 Total
## <chr> <dbl> <dbl> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Finland 1988 1988 Finla 4.1 5.4 2.9 4.2 3.6 4.8
## 2 Finland 1988. 1988 Finla 4 5.1 2.8 3.9 3.4 4.6
## 3 Finland 1988. 1988 Finla 3.9 4.9 2.8 3.7 3.2 4.5
## 4 Finland 1988. 1988 Finla 3.9 4.8 2.7 3.6 3.2 4.4
## 5 Finland 1988. 1988 Finla 3.9 4.8 2.7 3.6 3.2 4.3
## 6 Finland 1988. 1988 Finla 3.8 4.7 2.7 3.6 3.1 4.3
## # … with 3 more variables: Under25_F <dbl>, Under25_M <dbl>, Under25 <dbl>
## # A tibble: 6 x 13
## country time year cod Females Males Over25_F Over25_M Over25 Total
## <chr> <dbl> <dbl> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Turkey 2018. 2018 Turke NA NA NA NA 9.4 11.1
## 2 Turkey 2019. 2018 Turke NA NA NA NA 9.5 11.3
## 3 Turkey 2019. 2018 Turke NA NA NA NA 9.6 11.5
## 4 Turkey 2019. 2018 Turke NA NA NA NA 9.7 11.6
## 5 Turkey 2019. 2018 Turke NA NA NA NA 10.1 12.1
## 6 Turkey 2019. 2018 Turke NA NA NA NA 10.7 12.7
## # … with 3 more variables: Under25_F <dbl>, Under25_M <dbl>, Under25 <dbl>
Paa tal vamos filtrar os valores correspondentes a todo o ano de 2018 (12 meses), usando os valores da coluna year.
# filtrar apenas paises da Europa
dados_2018 <- filter(eurostat, year == 2018,
country != "Japan" & country != "USA")
dim(dados_2018)## [1] 372 13
## [1] "country" "time" "year" "cod" "Females"
## [6] "Males" "Over25_F" "Over25_M" "Over25" "Total"
## [11] "Under25_F" "Under25_M" "Under25"
# criar variavel para os meses e acrescentar uma coluna correspondente ao mes
meses <- c("Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez")
dados_2018$mes <- rep(meses, 31)
# transformar 'mes' em FACTOR ordenado por niveis
dados_2018$mes <- factor(dados_2018$mes, levels=meses)
summary(dados_2018$mes) # existem 31 paises com registos efetuados em cada mes## Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez
## 31 31 31 31 31 31 31 31 31 31 31 31
# DE NOVO: alterar o nome de Republica Checa e nome da coluna COUNTRY
# 1.
dados_2018 <- rename(dados_2018, region=country)
# 2.
czechia <- which(dados_2018$region == "Czechia")
dados_2018$region[czechia] <- "Czech Republic"
# juntar as duas data frames
dados_2018_map <- left_join(dados_2018, mapas, by = "region")
ggplot(dados_2018_map, aes(long, lat)) +
geom_polygon(aes(group = group, fill = Total)) +
# scale_fill_gradientn(colours = topo.colors(2)) +
scale_fill_gradient(low="#99d594", high="#fc8d59") +
facet_wrap( ~ mes, ncol = 6) +
ggtitle("Desemprego Global por País nos Meses de 2018") +
xlab("Longitude") + ylab("Latitude") +
coord_fixed()
Os dados referentes aos incêndios florestais foram extraídos de uma base de dados do Instituto da Conservação da Natureza e das Florestas – site do ICNF.
Pode aceder à página do ICNF e fazer o download do conjunto de dados.
# Importacao dos dados em formato .csv
fogos <- read.csv("FOGOS_1980_2000.csv", header = TRUE, sep=";", dec = ",", na.strings = "")
colnames(fogos)## [1] "ID" "INE" "DISTRITO"
## [4] "CONCELHO" "FREGUESIA" "x"
## [7] "y" "lat" "lon"
## [10] "Ano" "Data_inicio" "Data_fim"
## [13] "CAUSA" "A_POV" "A_MATOS"
## [16] "Area_Total_Florestal" "A_PUB" "A_PRIVADA"
## [19] "REAC"
# seleccionar apenas incendios do ano 2000
fogos <- filter(fogos, Ano == "2000")
head(fogos) # colunas x e y representam as latitude e longitudes## ID INE DISTRITO CONCELHO FREGUESIA x y
## 1 151436 11107 Aveiro Mealhada Vacari\x8da -8.404719 40.36434
## 2 151579 11102 Aveiro Mealhada Barcou\x8do -8.484393 40.30259
## 3 151580 11106 Aveiro Mealhada Pampilhosa -8.429501 40.33872
## 4 151605 11106 Aveiro Mealhada Pampilhosa -8.429501 40.33872
## 5 151644 11102 Aveiro Mealhada Barcou\x8do -8.484393 40.30259
## 6 151645 11102 Aveiro Mealhada Barcou\x8do -8.484393 40.30259
## lat lon Ano Data_inicio
## 1 40 21 51.616 -8 24 16.987 2000 2000-10-28 14:28:00.000
## 2 40 18 09.323 -8 29 03.813 2000 2000-06-26 21:29:00.000
## 3 40 20 19.392 -8 25 46.205 2000 2000-06-26 20:29:00.000
## 4 40 20 19.392 -8 25 46.205 2000 2000-06-30 15:03:00.000
## 5 40 18 09.323 -8 29 03.813 2000 2000-05-19 21:24:00.000
## 6 40 18 09.323 -8 29 03.813 2000 2000-05-31 18:23:00.000
## Data_fim CAUSA A_POV A_MATOS Area_Total_Florestal A_PUB
## 1 2000-10-28 16:25:00.000 <NA> 0.00 0.15 0.15 0
## 2 2000-06-26 23:05:00.000 <NA> 0.00 0.12 0.12 0
## 3 2000-06-26 21:05:00.000 <NA> 0.00 0.01 0.01 0
## 4 2000-06-30 18:10:00.000 <NA> 0.20 0.00 0.20 0
## 5 2000-05-19 22:30:00.000 <NA> 0.02 0.00 0.02 0
## 6 2000-05-31 19:35:00.000 <NA> 0.40 0.00 0.40 0
## A_PRIVADA REAC
## 1 0.15 0
## 2 0.12 0
## 3 0.01 0
## 4 0.20 0
## 5 0.02 0
## 6 0.40 0
## [1] 34109 19
## 'data.frame': 34109 obs. of 19 variables:
## $ ID : int 151436 151579 151580 151605 151644 151645 151646 151647 151648 151649 ...
## $ INE : int 11107 11102 11106 11106 11102 11102 11105 11103 11105 11105 ...
## $ DISTRITO : Factor w/ 36 levels "\x83vora","\x83VORA",..: 3 3 3 3 3 3 3 3 3 3 ...
## $ CONCELHO : Factor w/ 535 levels "\x83vora","\x83VORA",..: 256 256 256 256 256 256 256 256 256 256 ...
## $ FREGUESIA : Factor w/ 6250 levels "\x83vora (Santo Ant\x8bo)",..: 5644 808 3770 3770 808 808 3121 1390 3121 3121 ...
## $ x : num -8.4 -8.48 -8.43 -8.43 -8.48 ...
## $ y : num 40.4 40.3 40.3 40.3 40.3 ...
## $ lat : Factor w/ 3969 levels "36 59 50.395",..: 1311 1249 1281 1281 1249 1249 1329 1290 1329 1329 ...
## $ lon : Factor w/ 3968 levels "-6 13 07.255",..: 2528 2810 2610 2610 2810 2810 2665 2744 2665 2665 ...
## $ Ano : int 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 ...
## $ Data_inicio : Factor w/ 238558 levels "1980-01-30 19:55:00.000",..: 238427 218245 218239 218503 215782 215909 216202 216857 216994 217060 ...
## $ Data_fim : Factor w/ 193550 levels "1899-12-30 00:00:00.000",..: 193418 176518 176506 176770 174271 174397 174668 175297 175401 175448 ...
## $ CAUSA : Factor w/ 4 levels "Indeterminada",..: NA NA NA NA NA NA NA 1 NA NA ...
## $ A_POV : num 0 0 0 0.2 0.02 0.4 0 0.4 0 0 ...
## $ A_MATOS : num 0.15 0.12 0.01 0 0 0 0.01 0 0 0.01 ...
## $ Area_Total_Florestal: num 0.15 0.12 0.01 0.2 0.02 0.4 0.01 0.4 0 0.01 ...
## $ A_PUB : num 0 0 0 0 0 0 0 0 0 0 ...
## $ A_PRIVADA : num 0.15 0.12 0.01 0.2 0.02 0.4 0.01 0.4 0 0.01 ...
## $ REAC : int 0 0 0 0 0 0 0 0 0 0 ...
Importação do shapefile de Portugal Continental e observação das localizações dos incêndios do ano de 2000 utilizando o RBase.
## Loading required package: sp
## rgdal: version: 1.4-4, (SVN revision 833)
## Geospatial Data Abstraction Library extensions to R successfully loaded
## Loaded GDAL runtime: GDAL 2.1.3, released 2017/20/01
## Path to GDAL shared files: /Library/Frameworks/R.framework/Versions/3.6/Resources/library/rgdal/gdal
## GDAL binary built with GEOS: FALSE
## Loaded PROJ.4 runtime: Rel. 4.9.3, 15 August 2016, [PJ_VERSION: 493]
## Path to PROJ.4 shared files: /Library/Frameworks/R.framework/Versions/3.6/Resources/library/rgdal/proj
## Linking to sp version: 1.3-1
## OGR data source with driver: ESRI Shapefile
## Source: "/Users/soraiapereira/Documents/Disco/curso R/portugal_contorno.shp", layer: "portugal_contorno"
## with 1 features
## It has 6 fields
ggplot2## long lat group order region subregion
## 1 -7.406153 37.17944 1 1 Portugal <NA>
## 2 -7.493603 37.16831 1 2 Portugal <NA>
## 3 -7.834131 37.00571 1 3 Portugal <NA>
## 4 -7.939697 37.00542 1 4 Portugal <NA>
## 5 -8.136767 37.07705 1 5 Portugal <NA>
## 6 -8.484326 37.10005 1 6 Portugal <NA>
## 'data.frame': 186 obs. of 6 variables:
## $ long : num -7.41 -7.49 -7.83 -7.94 -8.14 ...
## $ lat : num 37.2 37.2 37 37 37.1 ...
## $ group : num 1 1 1 1 1 1 1 1 1 1 ...
## $ order : int 1 2 3 4 5 6 7 8 9 10 ...
## $ region : chr "Portugal" "Portugal" "Portugal" "Portugal" ...
## $ subregion: chr NA NA NA NA ...
# mapa de Portugal
ggplot() +
geom_polygon(data = portugal, aes(x = long, y = lat, group = group))+
coord_fixed(1.2)# mapa de pontos
ggplot() +
geom_point(data = fogos, aes(x = x, y = y), color = "red")+
coord_fixed(1.2)# mapa com Potugal e pontos referentes ao ano 2000
ggplot() +
geom_polygon(data=portugal, aes(x=long, y=lat, group=group), fill="gray40") +
geom_point(data=fogos, aes(x=x, y=y), color="red", size=1.3) +
coord_fixed(1.2) +
xlab("Longitude") + ylab("Latitude") +
ggtitle("Incêndios florestais em Portugal \n(2000)")
Se para cada ponto referente a um incêndio pretendermos ver a informação relativa à área total florestal, podemos fazê-lo usando o ggplot. Para isso devemos associar cada ponto à respetiva área total florestal (coluna Área.Total.Florestal dos dados fogos),
ggplot() +
geom_polygon(data = portugal, aes(x = long, y = lat, group = group), fill = "grey40") +
geom_point(aes(x = x, y = y,color = Area_Total_Florestal),
data = fogos,
size = 1.3) +
scale_colour_gradientn("Área Total Florestal", colours = heat.colors(4)) +
xlab("Longitude") + ylab("Latitude") +
coord_fixed(1.2)Como podemos ver no mapa, a maioria dos valores da variável de interesse está entre 0 e 500m2, mas apresenta valores extremos que podem ir até 4000 m2. A caixa de bigodes, ou boxplot, ajuda a compreender a distribuição desta variável.
Para uma análise mais clara da distribuição espacial, sugerimos uma tranformação logarítmica da variável de interesse.
ggplot(fogos, aes(x="", y=log(Area_Total_Florestal))) +
geom_boxplot() + ylab("Área total florestal ")ggplot() +
geom_polygon(data = portugal, aes(x = long, y = lat, group = group), fill = "grey40") +
geom_point(aes(x = x, y = y,color = log(Area_Total_Florestal)),
data = fogos,
size = 1.3) +
scale_colour_gradientn("log(Área)", colours = heat.colors(4)) +
coord_fixed(1.2)Podemos ainda representar as localizações dos fogos juntamente com a informação da respetiva causa do fogo (variável CAUSAS dos dados fogos).
fogos$CAUSA<-as.character(fogos$CAUSA)
fogos$CAUSA[is.na(fogos$CAUSA)]<-"NA"
ggplot() +
geom_polygon(data=portugal, aes(x=long, y=lat, group=group), fill = "grey40") +
geom_point(aes(x=x, y=y, color=CAUSA), data=fogos, size=1.8) +
scale_color_manual("Possíveis causas:", values = 2:6) + # change color scale
coord_fixed(1.2) +
ggtitle("Causas dos incêncios em 2000")